package Bls;

import Dao.DetalleprestamoDaoLocal;
import Dao.PrestamoDaoLocal;
import Enumeracion.EstadoDetallePrestamo;
import Enumeracion.EstadoPrestamo;
import Enumeracion.EstadoServicio;
import Modelo.Detalleprestamo;
import Modelo.Libro;
import Modelo.Prestamo;
import Modelo.Usuario;
import java.util.Date;
import java.util.List;
import javax.ejb.EJB;
import javax.ejb.Stateless;

@Stateless
public class PrestamoBl implements PrestamoBlLocal {
    @EJB
    private DetalleprestamoDaoLocal detallePrestamoDao;
    @EJB
    private PrestamoDaoLocal prestamoDao;

    @Override
    public EstadoServicio lendBooks(Usuario user, List<Libro> books) {
        
        List<Prestamo>prestamos=prestamoDao.findIncompleteByUser(user);
        int available =3;
        for(Prestamo p : prestamos){
            available=available - detallePrestamoDao.findLends(p).size();
        }
        if(available<=0 || user.getId()==null || books.isEmpty() || books.size()>available){
        return EstadoServicio.INCOMPLETE;
    }
    else{
        Prestamo p = new Prestamo();
        p.setIdusuario(user);
        p.setFecha(new Date());
        p.setHora(new Date());
        p.setEstado(EstadoPrestamo.OPEN.ordinal());
        prestamoDao.create(p);
        for (Libro l : books){
            Detalleprestamo dp = new Detalleprestamo();
            dp.setIdprestamo(p);
            dp.setIdlibro(l);
            dp.setEstado(EstadoDetallePrestamo.LEND.ordinal());
            detallePrestamoDao.create(dp);
        }
        return EstadoServicio.COMPLETE;
    } 
    }
    @Override
    public List<Prestamo> getAll() {
        return prestamoDao.findAll();
    }
    @Override
    public Prestamo findById(int id) {
        return prestamoDao.find(id);
    }
}